#include "vector.h"
#include "list.h"
#include "string.h"
#include "test_vector.h"
#include "test_list.h"
#include "test_string.h"
#include <unistd.h>
#include <vector>
#include <list>
#include <map>
#include <string>

//template<class T>
//class Base
//{
//
//};
//
//template<class T>
//class Derive1 : public Base<T>
//{
//
//};
//
//template<class T>
//class Derive2 : public Base<T>
//{
//
//};

void test_succeed()
{
    //Base<int> b;
    //Derive1<int> d1;
    //Derive2<int> d2;
    //b = d2;
    //b = d1;
}

int main()
{
    // lz::vector_emplace_back();
    // lz::vector_construct();
    // lz::vector_emplace();
    // lz::vector_push_back();
    // lz::vector_insert();
    // lz::vector_pop_back();
    // lz::vector_erase();
    // lz::vector_iterator();
    // lz::vector_shrink_to_fit();
    // lz::vector_clear();
    // lz::vector_front_back();
    // lz::vector_assign();
    // lz::test_stl_vector();
    
    // lz::list_construct();
    // lz::list_push_pop();
    // lz::list_insert_erase();
    // lz::list_insert_erase();
    // lz::list_emplace();
    // lz::list_resize();
    // lz::list_assign();
    // lz::list_iterator();
    // lz::list_remove();
    // lz::list_remove_if();
    // lz::list_unique();
    // lz::list_splice();
    // lz::list_merge();
    // lz::list_reverse();
    // lz::list_sort();
    // lz::list_splice();
    // lz::list_merge();
   //  lz::list_reverse();

    std::string s;
    std::cout << "str: " << s << std::endl;
    s.reserve(100);
    std::cout << "capacity: " << s.capacity() << std::endl;
    std::cout << "str: " << s << std::endl;
    s.reserve(10);
    std::cout << "capacity: " << s.capacity() << std::endl;
    std::cout << "str: " << s << std::endl;
     lz::string s1;
     s1.reserve(100);
     std::cout << "capacity: " << s1.capacity() << std::endl;
     s1.reserve(50);
     std::cout << "capacity: " << s1.capacity() << std::endl;
     // std::cout << "s" << s1 << std::endl;
     s.resize(10);
     std::cout << "capacity: " << s.capacity() << std::endl;
     s.resize(5, 'c');
     std::cout << "capacity: " << s.capacity() << std::endl;
     std::for_each(s.begin(), s.end(), [](auto e)
         {
             std::cout << "e: " << e << std::endl;
         });
     s.resize(200, 'a');
     std::cout << "capacity: " << s.capacity() << std::endl;
     std::for_each(s.begin(), s.end(), [](auto e)
         {
             std::cout << "e: " << e << std::endl;
         });
     s.insert(s.begin(), 'c');

     // s.replace(s.begin(), 4, "!");
     s.assign("ni");
     std::cout << s.capacity() << std::endl;
     std::cout << s << std::endl;
     // s.c_str() = "nihao!";
     // s.data() = "nihao!";
     s.find("nihao");
     return 0;
}